﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MPiece
{
    public class VersionConverter
    {
        private uint _versionNumber;

        protected const uint _shiftValue = (uint)(ushort.MaxValue) + 1;

        public uint VersionNumber
        {
            get { return _versionNumber; }
            protected set { _versionNumber = value; }
        }

        public ushort HiVersion
        {
            get
            {
                return (ushort)(VersionNumber / _shiftValue);
            }
        }

        public ushort LowVersion
        {
            get
            {
                return (ushort)(VersionNumber % _shiftValue);
            }
        }

        public string VersionNumberFormula
        {
            get
            {
                return string.Format("{0} * {1} + {2}", HiVersion, _shiftValue, LowVersion);
            }
        }

        public string HiVersionFormula
        {
            get
            {
                return string.Format("{0} / {1}", VersionNumber, _shiftValue);
            }
        }

        public string LowVersionFormula
        {
            get
            {
                return string.Format("{0} % {1}", VersionNumber, _shiftValue);
            }
        }

        public void Convert(uint versionNumber)
        {
            VersionNumber = versionNumber;
        }

        public uint Convert(ushort hiVersion, ushort lowVersion)
        {
            return VersionNumber = hiVersion * _shiftValue + lowVersion;
        }
    }
}
